<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\SportsMeeting;
use App\Model\Tournament;
use App\Model\Athlete;
use App\Model\Team;
use App\Model\Grade;
use App\Model\SportRegister;
use App\Model\MiddleSportsMeetingTournament;
use Illuminate\Support\Facades\DB;

class SportsMeetingController extends Controller
{
    // 运动会列表
    function index(){
        // 调用系统内置分页函数，每次查8条运动会数据
        $data = SportsMeeting::paginate(8);
        // 返回视图模板，将查出的运动会数据作为参数带到页面
        return view('admin.sportsmeeting.index',['data' => $data]);
    }

    // 添加运动会
    function add(Request $request){
        // 如果是post请求，则做更新数据操作
        if($request->isMethod('POST')){
            // 获取页面提交的表单
            $data = $request->input('sportsmeeting');
            // 实例化一个运动会模型
            $new_sportsmeeting = new SportsMeeting();
            // 给模型的属性赋值
            $new_sportsmeeting->name = $data['name'];
            $new_sportsmeeting->start_time = $data['start_time'];
            $new_sportsmeeting->end_time = $data['end_time'];
            // 将获取到的比赛项目id字符串（页面提交的值是通过“_”拼接的）
            // 传过来的值示例：_12_23_43，拆分后为 "",12,23,43
            $tournament_ids = $data['tournament_ids'];
            // 将比赛项目id字符串按“_”拆分(调用PHP内置的explode函数)，返回一个数组
            $new_tournament_ids =  explode('_',$tournament_ids); 
            // 将当前的运动会信息保存到数据库，插入后才有id
            if($new_sportsmeeting->save()){
                // 处理比赛项目
                // 先查出刚才存到数据库的运动会信息，已存在id，方便更新
                $cur_sportsmeeting = SportsMeeting::where([
                    'name' => $new_sportsmeeting->name,
                    'start_time' => $new_sportsmeeting->start_time,
                    'end_time' => $new_sportsmeeting->end_time
                ])->first();
                // 根据拆分后的数组循环（第一个是空的，从第二位开始）
                for($i=1;$i<count($new_tournament_ids); $i++){
                    // 实例化运动会——比赛项目中间表模型
                    $new_middle_s_t = new MiddleSportsMeetingTournament();
                    // 根据拆分后得到的项目的id查出项目
                    $cur_tournament = Tournament::where("id",$new_tournament_ids[$i])->first();

                    // 赋值
                    $new_middle_s_t->sports_meeting_id = $cur_sportsmeeting->id;
                    $new_middle_s_t->tournament_id = $new_tournament_ids[$i];
                    $new_middle_s_t->name = $cur_tournament->name;
                    // 插入到数据库中
                    $new_middle_s_t->save();

                }
                return redirect('admin/sport/meeting')->with('success',"新增运动会成功");
            }else{
                return redirect()->back();
            }
        }
        // 如果为get请求，则查出所有项目，返回视图
        $tournament = Tournament::all();

        return view('admin.sportsmeeting.add',['data' => $tournament]);
    }

    // 更新运动会
    function update(Request $request,$id){
        // 根据id查出当前运动会
        $sportsmeeting = SportsMeeting::find($id);
        // 如果为POST请求
        if($request->isMethod('POST')){
            // 获取表单数据
            $data = $request->input('sportsmeeting');
            // 重新赋值
            $sportsmeeting->name = $data['name'];
            $sportsmeeting->start_time = $data['start_time'];
            $sportsmeeting->end_time = $data['end_time'];

            // 更新数据
            if($sportsmeeting->save()){
                return redirect('admin/sport/meeting')->with('success',"修改运动会信息成功");
            }else{
                return redirect()->back();
            }
        }
        // get请求直接返回视图，并带上当前运动会数据
        return view('admin.sportsmeeting.update',['sportsmeeting' => $sportsmeeting]);
    }


    // 报名
    function addRegister(Request $request){
        // 查出所有运动会信息
        $sportsmeetings = SportsMeeting::all();
        // 查出所有运动员信息
        $athletes = Athlete::all();
        // 查出所有团队信息
        $teams = Team::all();
        // 如果是post请求
        if($request->isMethod('POST')){
            // 获取表单数据
            $data = $request->input('register');
            // 实例化报名表模型
            $sport_register = new SportRegister();
            // 赋值
            $sport_register->sports_meeting_id = $data['sportsmeeting_id'];
            $sport_register->tournament_id = $data['tournament_id'];
            $sport_register->team_id = $data['team_id'];
            $sport_register->athlete_id = $data['athlete_id'];

            // 保存报名表数据
            if($sport_register->save()){
                return redirect('admin/sport/meeting')->with('success',"报名成功");
            }else{
                return redirect()->back();
            }

        }

        // get请求返回视图，带上运动会，运动员，团队信息
        return view('admin.sportsmeeting.addregister',['sportsmeetings' => $sportsmeetings,'athletes' => $athletes,'teams' => $teams]);
    }

    // 录入成绩
    function addGrade(Request $request){
        // 查出所有运动会信息
        $sportsmeetings = SportsMeeting::all();

        // 如果是post请求
        if($request->isMethod('POST')){
            // 获取表单数据
            $data = $request->input('grade');
            // 实例化成绩表模型
            $grade = new Grade();
            // 赋值
            $grade->sports_meeting_id = $data['sportsmeeting_id'];
            $grade->tournament_id = $data['tournament_id'];
            $grade->athlete_id = $data['athlete_id'];
            // 根据运动员id查出当前运动员信息，为了取到团队信息
            $cur_athlete = Athlete::where('id',(int)$data['athlete_id'])->first();
            $grade->team_id = $cur_athlete->team_id;
            $grade->round = $data['round'];
            $grade->grade = $data['grade'];

            // 插入成绩数据
            if($grade->save()){
                return redirect('admin/sport/meeting')->with('success',"录入成绩成功");
            }else{
                return redirect()->back();
            }

        }

        // get请求直接返回视图，并带上运动会信息
        return view('admin.sportsmeeting.addgrade',['sportsmeetings' => $sportsmeetings]);

    }

    // ajax 查询选择的运动会对应报名表的比赛项目信息
    public function selectTournament($sportsmeetingId){
        // 根据运动会Id查出中间表中对应的数据
        $data = MiddleSportsMeetingTournament::where('sports_meeting_id',$sportsmeetingId)->select('tournament_id','name')->get();
        // 返回数据
        return $data;
    }

    // ajax 查询选择的运动会对应报名表的运动员信息
    public function selectAthlete($sportsmeetingId,$tournameId){
        // 根据运动会id和比赛项目id查出符合条件的报名表的数据
        $register = SportRegister::where([
                                        ['sports_meeting_id', '=', $sportsmeetingId],
                                        ['tournament_id', '=', $tournameId],
                                    ])->get();
        // 定义一个空数组，用于存放返回的数据                            
        $data = array();
        // 循环查出的报名表数据
        foreach($register as $vo){
            // 根据id查出对应的运动员
            $athlete = Athlete::where('id',$vo->athlete_id)->first();
            // 判断是否为空
            if(!empty($athlete)){
                // 将运动员的id和姓名设置到新数组里
                $new_arr = array(
                    "id" => $athlete->id,
                    "name" => $athlete->name
                );
                // PHP内置函数，将数据添加到数组里
                array_push($data,$new_arr);
            }
        }
        // 返回数据
        return $data;
    }

    // 根据项目ID选择回合数 
    public function selectRound($tournameId){
        // 根据项目id查出对应的项目
        $data = Tournament::where('id',$tournameId)->get();
        // 返回数据
        return $data;
    }

    //根据id删除数据
    function remove($id){
        // 根据id查出当前运动会
        $cur_data = SportsMeeting::find($id);
        
        //调用delete()函数删除数据，并重定向返回视图
        if($cur_data->delete()){
            return redirect('admin/sport/meeting')->with('success','删除成功');
        }

        return redirect('admin/sport/meeting')->with('error','删除失败');
    }

}
